{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据集说明\n",
    "选取数据集为wine reviews数据集。数据集格式为csv，共有150930条数据，采用pandas库对数据集进行处理和分析。  \n",
    "数据集共有10个特征，分别为country：葡萄酒的生产国；description：葡萄酒的描述性文本；designation:用来制作葡萄酒的葡萄的产地；points：葡萄酒的评分（满分100，所有评分都大于等于80）；price：葡萄酒的价格（美元）；region_1：葡萄酒生产的具体的州或者省；region_2:比region_1更细致的地址；variety：葡萄的种类；winery：酿酒厂"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>country</th>\n",
       "      <th>description</th>\n",
       "      <th>designation</th>\n",
       "      <th>points</th>\n",
       "      <th>price</th>\n",
       "      <th>province</th>\n",
       "      <th>region_1</th>\n",
       "      <th>region_2</th>\n",
       "      <th>variety</th>\n",
       "      <th>winery</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>US</td>\n",
       "      <td>This tremendous 100% varietal wine hails from ...</td>\n",
       "      <td>Martha's Vineyard</td>\n",
       "      <td>96</td>\n",
       "      <td>235.0</td>\n",
       "      <td>California</td>\n",
       "      <td>Napa Valley</td>\n",
       "      <td>Napa</td>\n",
       "      <td>Cabernet Sauvignon</td>\n",
       "      <td>Heitz</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Spain</td>\n",
       "      <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
       "      <td>Carodorum Selección Especial Reserva</td>\n",
       "      <td>96</td>\n",
       "      <td>110.0</td>\n",
       "      <td>Northern Spain</td>\n",
       "      <td>Toro</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Tinta de Toro</td>\n",
       "      <td>Bodega Carmen Rodríguez</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>US</td>\n",
       "      <td>Mac Watson honors the memory of a wine once ma...</td>\n",
       "      <td>Special Selected Late Harvest</td>\n",
       "      <td>96</td>\n",
       "      <td>90.0</td>\n",
       "      <td>California</td>\n",
       "      <td>Knights Valley</td>\n",
       "      <td>Sonoma</td>\n",
       "      <td>Sauvignon Blanc</td>\n",
       "      <td>Macauley</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>US</td>\n",
       "      <td>This spent 20 months in 30% new French oak, an...</td>\n",
       "      <td>Reserve</td>\n",
       "      <td>96</td>\n",
       "      <td>65.0</td>\n",
       "      <td>Oregon</td>\n",
       "      <td>Willamette Valley</td>\n",
       "      <td>Willamette Valley</td>\n",
       "      <td>Pinot Noir</td>\n",
       "      <td>Ponzi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>France</td>\n",
       "      <td>This is the top wine from La Bégude, named aft...</td>\n",
       "      <td>La Brûlade</td>\n",
       "      <td>95</td>\n",
       "      <td>66.0</td>\n",
       "      <td>Provence</td>\n",
       "      <td>Bandol</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Provence red blend</td>\n",
       "      <td>Domaine de la Bégude</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  country                                        description  \\\n",
       "0      US  This tremendous 100% varietal wine hails from ...   \n",
       "1   Spain  Ripe aromas of fig, blackberry and cassis are ...   \n",
       "2      US  Mac Watson honors the memory of a wine once ma...   \n",
       "3      US  This spent 20 months in 30% new French oak, an...   \n",
       "4  France  This is the top wine from La Bégude, named aft...   \n",
       "\n",
       "                            designation  points  price        province  \\\n",
       "0                     Martha's Vineyard      96  235.0      California   \n",
       "1  Carodorum Selección Especial Reserva      96  110.0  Northern Spain   \n",
       "2         Special Selected Late Harvest      96   90.0      California   \n",
       "3                               Reserve      96   65.0          Oregon   \n",
       "4                            La Brûlade      95   66.0        Provence   \n",
       "\n",
       "            region_1           region_2             variety  \\\n",
       "0        Napa Valley               Napa  Cabernet Sauvignon   \n",
       "1               Toro                NaN       Tinta de Toro   \n",
       "2     Knights Valley             Sonoma     Sauvignon Blanc   \n",
       "3  Willamette Valley  Willamette Valley          Pinot Noir   \n",
       "4             Bandol                NaN  Provence red blend   \n",
       "\n",
       "                    winery  \n",
       "0                    Heitz  \n",
       "1  Bodega Carmen Rodríguez  \n",
       "2                 Macauley  \n",
       "3                    Ponzi  \n",
       "4     Domaine de la Bégude  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('winemag-data_first150k.csv',index_col=0)\n",
    "# df = df.sample(n=10000).reset_index(drop=True)\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>points</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>150930.000000</td>\n",
       "      <td>137235.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>87.888418</td>\n",
       "      <td>33.131482</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.222392</td>\n",
       "      <td>36.322536</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>80.000000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>86.000000</td>\n",
       "      <td>16.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>88.000000</td>\n",
       "      <td>24.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>90.000000</td>\n",
       "      <td>40.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>2300.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              points          price\n",
       "count  150930.000000  137235.000000\n",
       "mean       87.888418      33.131482\n",
       "std         3.222392      36.322536\n",
       "min        80.000000       4.000000\n",
       "25%        86.000000      16.000000\n",
       "50%        88.000000      24.000000\n",
       "75%        90.000000      40.000000\n",
       "max       100.000000    2300.000000"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据预处理\n",
    "### points与price特征的处理\n",
    "由于关联规则挖掘一般是对于类别型变量进行的，而points和price为连续性变量，我们对其进行处理，将这两个变量转换为只有两个类别的类别型变量。我们设定price>40的为高价格(high_price)，price<=40为低价格(low_price)，而points>88.0定义为高分数(high_points)，points<=88.0定义为低分数（low_points）。  \n",
    "处理过程如下所示："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将数据集中的连续特征price和points改为类别变量，根据这两个变量的数值分布情况，规定价格在40美元以上的为高价格，40美元以下的为低价格  \n",
    "规定分数在88分以上的就为高评分，88分以下为低评分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['high_price'] = df['price'].apply(lambda x:1 if x > 40 else 0 )\n",
    "df['low_price'] = df['price'].apply(lambda x: 1 if x <= 40 else 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['high_points'] = df['points'].apply(lambda x:1 if x > 88.0 else 0 )\n",
    "df['low_points'] = df['points'].apply(lambda x:1 if x <= 88.0 else 0 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>country</th>\n",
       "      <th>description</th>\n",
       "      <th>designation</th>\n",
       "      <th>points</th>\n",
       "      <th>price</th>\n",
       "      <th>province</th>\n",
       "      <th>region_1</th>\n",
       "      <th>region_2</th>\n",
       "      <th>variety</th>\n",
       "      <th>winery</th>\n",
       "      <th>high_price</th>\n",
       "      <th>low_price</th>\n",
       "      <th>high_points</th>\n",
       "      <th>low_points</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>US</td>\n",
       "      <td>This tremendous 100% varietal wine hails from ...</td>\n",
       "      <td>Martha's Vineyard</td>\n",
       "      <td>96</td>\n",
       "      <td>235.0</td>\n",
       "      <td>California</td>\n",
       "      <td>Napa Valley</td>\n",
       "      <td>Napa</td>\n",
       "      <td>Cabernet Sauvignon</td>\n",
       "      <td>Heitz</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Spain</td>\n",
       "      <td>Ripe aromas of fig, blackberry and cassis are ...</td>\n",
       "      <td>Carodorum Selección Especial Reserva</td>\n",
       "      <td>96</td>\n",
       "      <td>110.0</td>\n",
       "      <td>Northern Spain</td>\n",
       "      <td>Toro</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Tinta de Toro</td>\n",
       "      <td>Bodega Carmen Rodríguez</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>US</td>\n",
       "      <td>Mac Watson honors the memory of a wine once ma...</td>\n",
       "      <td>Special Selected Late Harvest</td>\n",
       "      <td>96</td>\n",
       "      <td>90.0</td>\n",
       "      <td>California</td>\n",
       "      <td>Knights Valley</td>\n",
       "      <td>Sonoma</td>\n",
       "      <td>Sauvignon Blanc</td>\n",
       "      <td>Macauley</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>US</td>\n",
       "      <td>This spent 20 months in 30% new French oak, an...</td>\n",
       "      <td>Reserve</td>\n",
       "      <td>96</td>\n",
       "      <td>65.0</td>\n",
       "      <td>Oregon</td>\n",
       "      <td>Willamette Valley</td>\n",
       "      <td>Willamette Valley</td>\n",
       "      <td>Pinot Noir</td>\n",
       "      <td>Ponzi</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>France</td>\n",
       "      <td>This is the top wine from La Bégude, named aft...</td>\n",
       "      <td>La Brûlade</td>\n",
       "      <td>95</td>\n",
       "      <td>66.0</td>\n",
       "      <td>Provence</td>\n",
       "      <td>Bandol</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Provence red blend</td>\n",
       "      <td>Domaine de la Bégude</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  country                                        description  \\\n",
       "0      US  This tremendous 100% varietal wine hails from ...   \n",
       "1   Spain  Ripe aromas of fig, blackberry and cassis are ...   \n",
       "2      US  Mac Watson honors the memory of a wine once ma...   \n",
       "3      US  This spent 20 months in 30% new French oak, an...   \n",
       "4  France  This is the top wine from La Bégude, named aft...   \n",
       "\n",
       "                            designation  points  price        province  \\\n",
       "0                     Martha's Vineyard      96  235.0      California   \n",
       "1  Carodorum Selección Especial Reserva      96  110.0  Northern Spain   \n",
       "2         Special Selected Late Harvest      96   90.0      California   \n",
       "3                               Reserve      96   65.0          Oregon   \n",
       "4                            La Brûlade      95   66.0        Provence   \n",
       "\n",
       "            region_1           region_2             variety  \\\n",
       "0        Napa Valley               Napa  Cabernet Sauvignon   \n",
       "1               Toro                NaN       Tinta de Toro   \n",
       "2     Knights Valley             Sonoma     Sauvignon Blanc   \n",
       "3  Willamette Valley  Willamette Valley          Pinot Noir   \n",
       "4             Bandol                NaN  Provence red blend   \n",
       "\n",
       "                    winery  high_price  low_price  high_points  low_points  \n",
       "0                    Heitz           1          0            1           0  \n",
       "1  Bodega Carmen Rodríguez           1          0            1           0  \n",
       "2                 Macauley           1          0            1           0  \n",
       "3                    Ponzi           1          0            1           0  \n",
       "4     Domaine de la Bégude           1          0            1           0  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### country特征的处理\n",
    "还有一个可用的类别型变量为country，但是country特征的取值过多，我们对这一变量进行进一步的简化，将country变量映射为continents变量，为其生产国所属的大洲，分别有北美洲，南美洲，欧洲，亚洲，非洲，大洋洲。  \n",
    "  \n",
    "下面列出了数据集中所有生产国信息："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "US                        62397\n",
       "Italy                     23478\n",
       "France                    21098\n",
       "Spain                      8268\n",
       "Chile                      5816\n",
       "Argentina                  5631\n",
       "Portugal                   5322\n",
       "Australia                  4957\n",
       "New Zealand                3320\n",
       "Austria                    3057\n",
       "Germany                    2452\n",
       "South Africa               2258\n",
       "Greece                      884\n",
       "Israel                      630\n",
       "Hungary                     231\n",
       "Canada                      196\n",
       "Romania                     139\n",
       "Slovenia                     94\n",
       "Uruguay                      92\n",
       "Croatia                      89\n",
       "Bulgaria                     77\n",
       "Moldova                      71\n",
       "Mexico                       63\n",
       "Turkey                       52\n",
       "Georgia                      43\n",
       "Lebanon                      37\n",
       "Cyprus                       31\n",
       "Brazil                       25\n",
       "Macedonia                    16\n",
       "Serbia                       14\n",
       "Morocco                      12\n",
       "England                       9\n",
       "Luxembourg                    9\n",
       "Lithuania                     8\n",
       "India                         8\n",
       "Czech Republic                6\n",
       "Ukraine                       5\n",
       "Bosnia and Herzegovina        4\n",
       "South Korea                   4\n",
       "Switzerland                   4\n",
       "Egypt                         3\n",
       "China                         3\n",
       "Slovakia                      3\n",
       "Albania                       2\n",
       "Tunisia                       2\n",
       "Japan                         2\n",
       "Montenegro                    2\n",
       "US-France                     1\n",
       "Name: country, dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['country'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将国家信息与大洲信息对应起来"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def continents(data):\n",
    "    North_America = ['US', 'Canada']\n",
    "    South_America = ['Chile', 'Argentina','Uruguay','Mexico','Turkey','Brazil']\n",
    "    Europe = ['Italy', 'Spain', 'France', 'Portugal','Austria', 'Germany','Greece','Hungary','Romania',\n",
    "              'Slovenia','Ukraine','Bosnia and Herzegovina','Croatia','Bulgaria','Moldova','Georgia',\n",
    "              'Macedonia','Serbia','Morocco','Luxembourg','England','Lithuania','Czech Republic','Switzerland ',\n",
    "              'Slovakia','Montenegro','Albania','US-France']\n",
    "    Africa = ['South Africa','Egypt','Tunisia']\n",
    "    Asia = ['Israel','Lebanon','Cyprus','India','South Korea', 'China', 'Japan']\n",
    "    Oceania = ['Australia', 'New Zealand']\n",
    "    if data in North_America:\n",
    "        return 'North_America'\n",
    "    elif data in South_America:\n",
    "        return 'South_America'\n",
    "    elif data in Europe:\n",
    "        return 'Europe'\n",
    "    elif data in Africa:\n",
    "        return 'Africa'\n",
    "    elif data in Asia:\n",
    "        return 'Asia'\n",
    "    else:\n",
    "        return 'Oceainia'\n",
    "\n",
    "df['continents'] = df['country'].apply(continents)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df = df['continents']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面再对大洲特征进行one-hot编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df = pd.get_dummies(new_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再将大洲信息与评分和价格信息拼成一个最终完整的数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_df['high_price'] = df['high_price']\n",
    "new_df['low_price'] = df['low_price']\n",
    "new_df['high_points'] = df['high_points']\n",
    "new_df['low_points'] = df['low_points']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最终我们得到了最终用来对关联规则进行挖掘的数据集："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Africa</th>\n",
       "      <th>Asia</th>\n",
       "      <th>Europe</th>\n",
       "      <th>North_America</th>\n",
       "      <th>Oceainia</th>\n",
       "      <th>South_America</th>\n",
       "      <th>high_price</th>\n",
       "      <th>low_price</th>\n",
       "      <th>high_points</th>\n",
       "      <th>low_points</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Africa  Asia  Europe  North_America  Oceainia  South_America  high_price  \\\n",
       "0       0     0       0              1         0              0           1   \n",
       "1       0     0       1              0         0              0           1   \n",
       "2       0     0       0              1         0              0           1   \n",
       "3       0     0       0              1         0              0           1   \n",
       "4       0     0       1              0         0              0           1   \n",
       "5       0     0       1              0         0              0           1   \n",
       "6       0     0       1              0         0              0           1   \n",
       "7       0     0       1              0         0              0           1   \n",
       "8       0     0       0              1         0              0           1   \n",
       "9       0     0       0              1         0              0           1   \n",
       "\n",
       "   low_price  high_points  low_points  \n",
       "0          0            1           0  \n",
       "1          0            1           0  \n",
       "2          0            1           0  \n",
       "3          0            1           0  \n",
       "4          0            1           0  \n",
       "5          0            1           0  \n",
       "6          0            1           0  \n",
       "7          0            1           0  \n",
       "8          0            1           0  \n",
       "9          0            1           0  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_df.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后我们将二值矩阵转换成事务型的列表数据。这里只列出了前7条。  \n",
    "**[['North_America', 'high_price', 'high_points'],  \n",
    "['Europe', 'high_price', 'high_points'],  \n",
    "['North_America', 'high_price', 'high_points'],  \n",
    "['North_America', 'high_price', 'high_points'],  \n",
    "['Europe', 'high_price', 'high_points'],  \n",
    "['Europe', 'high_price', 'high_points'],  \n",
    "['Europe', 'high_price', 'high_points']]**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 关联规则挖掘过程\n",
    "## 算法步骤：\n",
    "Apriori算法过程如下：  \n",
    "生成1项集：单趟扫描数据库D计算出各个1项集的支持度，得到频繁1项集的集合。    \n",
    "连接：由k-1项集生成k项集。k-1项集中只有前k-2个项（按字典排序）相同的项，才可以进行连接。  \n",
    "剪枝：由于连接得到的项集中某些元素不是频繁的，所以需要进行剪枝操作，剔除那些在候选集中的非频繁项集。通过单趟扫描数据集，计算中候选集中各个项集的支持度，将其中小于最小支持度的项集去掉，得到k项频繁项集。  \n",
    "重复步骤2～4，直到得到最终要求的k项集（k为人工输入），这时算法停止。在剪枝步中的每个元素需在数据集中进行验证来决定其支持度是否满足最大支持度，这里的验证过程需要对数据集进行多次扫描，是Apriori算法性能的一个瓶颈。\n",
    "### 支持度\n",
    "支持度(support)=(X,Y).count/T.count, (T是事务总和，(X,Y).count是X、Y同时出现的次数)\n",
    "### 置信度\n",
    "置信度(confidence)=(X,Y).count/X.count\n",
    "### 期望置信度\n",
    "期望置信度=Y.count/T.count\n",
    "### lift提升度\n",
    "提升度是可信度与期望可信度的比值，提升度大于1表示正相关，小于1表示负相关，等于1表示不相关。lift评价可以弥补置信度、支持度自身的不足，使得评价更为合理。利用这个值可以对关键规则进行排序，在一定程度上也是一个规则优化挑选的过程。\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Apriori算法代码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def getTransaction(full_item, bool_item):\n",
    "    ret = []\n",
    "    for i in range(len(full_item)):\n",
    "        if bool_item[i]==1:\n",
    "            ret.append(full_item[i])\n",
    "    return ret\n",
    "\n",
    "def preProcess():\n",
    "    ret = []\n",
    "    attr = list(new_df.columns.values)\n",
    "    for i in range(len(new_df)):\n",
    "        trans = getTransaction(attr, new_df.loc[i])\n",
    "        ret.append(trans)\n",
    "    return ret"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_C1(data_set):\n",
    "    \"\"\"\n",
    "    Create frequent candidate 1-itemset C1 by scaning data set.\n",
    "    Args:\n",
    "        data_set: A list of transactions. Each transaction contains several items.\n",
    "    Returns:\n",
    "        C1: A set which contains all frequent candidate 1-itemsets\n",
    "    \"\"\"\n",
    "    C1 = set()\n",
    "    for t in data_set:\n",
    "        for item in t:\n",
    "            item_set = frozenset([item])\n",
    "            C1.add(item_set)\n",
    "    return C1\n",
    "\n",
    "\n",
    "def is_apriori(Ck_item, Lksub1):\n",
    "    \"\"\"\n",
    "    Judge whether a frequent candidate k-itemset satisfy Apriori property.\n",
    "    Args:\n",
    "        Ck_item: a frequent candidate k-itemset in Ck which contains all frequent\n",
    "                 candidate k-itemsets.\n",
    "        Lksub1: Lk-1, a set which contains all frequent candidate (k-1)-itemsets.\n",
    "    Returns:\n",
    "        True: satisfying Apriori property.\n",
    "        False: Not satisfying Apriori property.\n",
    "    \"\"\"\n",
    "    for item in Ck_item:\n",
    "        sub_Ck = Ck_item - frozenset([item])\n",
    "        if sub_Ck not in Lksub1:\n",
    "            return False\n",
    "    return True\n",
    "\n",
    "\n",
    "def create_Ck(Lksub1, k):\n",
    "    \"\"\"\n",
    "    Create Ck, a set which contains all all frequent candidate k-itemsets\n",
    "    by Lk-1's own connection operation.\n",
    "    Args:\n",
    "        Lksub1: Lk-1, a set which contains all frequent candidate (k-1)-itemsets.\n",
    "        k: the item number of a frequent itemset.\n",
    "    Return:\n",
    "        Ck: a set which contains all all frequent candidate k-itemsets.\n",
    "    \"\"\"\n",
    "    Ck = set()\n",
    "    len_Lksub1 = len(Lksub1)\n",
    "    list_Lksub1 = list(Lksub1)\n",
    "    for i in range(len_Lksub1):\n",
    "        for j in range(1, len_Lksub1):\n",
    "            l1 = list(list_Lksub1[i])\n",
    "            l2 = list(list_Lksub1[j])\n",
    "            l1.sort()\n",
    "            l2.sort()\n",
    "            if l1[0:k-2] == l2[0:k-2]:\n",
    "                Ck_item = list_Lksub1[i] | list_Lksub1[j]\n",
    "                # pruning\n",
    "                if is_apriori(Ck_item, Lksub1):\n",
    "                    Ck.add(Ck_item)\n",
    "    return Ck\n",
    "\n",
    "\n",
    "def generate_Lk_by_Ck(data_set, Ck, min_support, support_data):\n",
    "    \"\"\"\n",
    "    Generate Lk by executing a delete policy from Ck.\n",
    "    Args:\n",
    "        data_set: A list of transactions. Each transaction contains several items.\n",
    "        Ck: A set which contains all all frequent candidate k-itemsets.\n",
    "        min_support: The minimum support.\n",
    "        support_data: A dictionary. The key is frequent itemset and the value is support.\n",
    "    Returns:\n",
    "        Lk: A set which contains all all frequent k-itemsets.\n",
    "    \"\"\"\n",
    "    Lk = set()\n",
    "    item_count = {}\n",
    "    for t in data_set:\n",
    "        for item in Ck:\n",
    "            if item.issubset(t):\n",
    "                if item not in item_count:\n",
    "                    item_count[item] = 1\n",
    "                else:\n",
    "                    item_count[item] += 1\n",
    "    t_num = float(len(data_set))\n",
    "    for item in item_count:\n",
    "        if (item_count[item] / t_num) >= min_support:\n",
    "            Lk.add(item)\n",
    "            support_data[item] = item_count[item] / t_num\n",
    "    return Lk\n",
    "\n",
    "\n",
    "def generate_L(data_set, k, min_support):\n",
    "    \"\"\"\n",
    "    Generate all frequent itemsets.\n",
    "    Args:\n",
    "        data_set: A list of transactions. Each transaction contains several items.\n",
    "        k: Maximum number of items for all frequent itemsets.\n",
    "        min_support: The minimum support.\n",
    "    Returns:\n",
    "        L: The list of Lk.\n",
    "        support_data: A dictionary. The key is frequent itemset and the value is support.\n",
    "    \"\"\"\n",
    "    support_data = {}\n",
    "    C1 = create_C1(data_set)\n",
    "    L1 = generate_Lk_by_Ck(data_set, C1, min_support, support_data)\n",
    "    Lksub1 = L1.copy()\n",
    "    L = []\n",
    "    L.append(Lksub1)\n",
    "    for i in range(2, k+1):\n",
    "        Ci = create_Ck(Lksub1, i)\n",
    "        Li = generate_Lk_by_Ck(data_set, Ci, min_support, support_data)\n",
    "        Lksub1 = Li.copy()\n",
    "        L.append(Lksub1)\n",
    "    return L, support_data\n",
    "\n",
    "\n",
    "def generate_big_rules(L, support_data, min_conf, min_support):\n",
    "    \"\"\"\n",
    "    Generate big rules from frequent itemsets.\n",
    "    Args:\n",
    "        L: The list of Lk.\n",
    "        support_data: A dictionary. The key is frequent itemset and the value is support.\n",
    "        min_conf: Minimal confidence.\n",
    "    Returns:\n",
    "        big_rule_list: A list which contains all big rules. Each big rule is represented\n",
    "                       as a 3-tuple.\n",
    "    \"\"\"\n",
    "    big_rule_list = []\n",
    "    sub_set_list = []\n",
    "    for i in range(0, len(L)):\n",
    "    #i -> i# 项集\n",
    "        for freq_set in L[i]:\n",
    "            #freq_set -> i项集中的每个元素\n",
    "            for sub_set in sub_set_list:\n",
    "                if sub_set.issubset(freq_set):\n",
    "                    conf = support_data[freq_set] / support_data[freq_set - sub_set]\n",
    "                    sup = support_data[freq_set]\n",
    "                    lift = conf / support_data[sub_set]\n",
    "                    big_rule = (freq_set - sub_set, sub_set, conf, sup, lift)\n",
    "                    if conf >= min_conf and sup >= min_support and big_rule not in big_rule_list:\n",
    "                        # print freq_set-sub_set, \" => \", sub_set, \"conf: \", conf\n",
    "                        big_rule_list.append(big_rule)\n",
    "            # l1中的每个元素都在其中\n",
    "            sub_set_list.append(freq_set)\n",
    "    return big_rule_list\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def plot_bar(rules, data, title):\n",
    "    plt.title(title)\n",
    "    plt.xticks(range(len(data)),rules,rotation=90)\n",
    "    plt.bar(range(len(data)), data, color = 'B')\n",
    "    # plt.savefig('figures\\\\'+title+'.png')\n",
    "    plt.show()\n",
    "\n",
    "def visualization(big_rule_list):\n",
    "    rules = []\n",
    "    conf = []\n",
    "    support = []\n",
    "    lift = []\n",
    "    for i in range(len(big_rule_list)):\n",
    "        rule = \"{}=>{}\".format(list(big_rules_list[i][0]), list(big_rules_list[i][1]))\n",
    "        rules.append(rule)\n",
    "        conf.append(big_rule_list[i][2])\n",
    "        support.append(big_rule_list[i][3])\n",
    "        lift.append(big_rule_list[i][4])\n",
    "    plot_bar(rules, support, 'rule-support figure')\n",
    "    plot_bar(rules, conf, 'rule-confidence figure')\n",
    "    plot_bar(rules, lift, 'rule-lift figure')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_set = preProcess()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "==================================================\n",
      "frequent 1-itemsets\t\tsupport\n",
      "==================================================\n",
      "frozenset({'low_price'}) 0.7017690320015901\n",
      "frozenset({'low_points'}) 0.5949711786921089\n",
      "frozenset({'high_price'}) 0.20749354005167958\n",
      "frozenset({'North_America'}) 0.41471543099450076\n",
      "frozenset({'Europe'}) 0.4332737030411449\n",
      "frozenset({'high_points'}) 0.4050288213078911\n",
      "==================================================\n",
      "frequent 2-itemsets\t\tsupport\n",
      "==================================================\n",
      "frozenset({'high_points', 'high_price'}) 0.16014046246604385\n",
      "frozenset({'North_America', 'high_price'}) 0.10329291724640562\n",
      "frozenset({'low_price', 'Europe'}) 0.25900086132644273\n",
      "frozenset({'low_price', 'North_America'}) 0.30969986086265155\n",
      "frozenset({'low_points', 'North_America'}) 0.24806201550387597\n",
      "frozenset({'low_points', 'Europe'}) 0.23858742463393626\n",
      "frozenset({'high_points', 'Europe'}) 0.19468627840720865\n",
      "frozenset({'low_price', 'low_points'}) 0.5040681110448553\n",
      "frozenset({'low_price', 'high_points'}) 0.19770092095673492\n",
      "frozenset({'North_America', 'high_points'}) 0.1666534154906248\n",
      "==================================================\n",
      "frequent 3-itemsets\t\tsupport\n",
      "==================================================\n",
      "frozenset({'low_price', 'Europe', 'low_points'}) 0.18310475054661102\n",
      "frozenset({'low_price', 'North_America', 'low_points'}) 0.2177433247200689\n",
      "\n",
      "Big Rules is: \n",
      "==================================================\n",
      "['high_price']=>['high_points'], confidence: 0.77, support: 0.16, lift: 1.906\n",
      "['North_America']=>['low_price'], confidence: 0.75, support: 0.31, lift: 1.064\n",
      "['low_points']=>['low_price'], confidence: 0.85, support: 0.50, lift: 1.207\n",
      "['low_price']=>['low_points'], confidence: 0.72, support: 0.50, lift: 1.207\n",
      "['low_points', 'Europe']=>['low_price'], confidence: 0.77, support: 0.18, lift: 1.094\n",
      "['low_price', 'Europe']=>['low_points'], confidence: 0.71, support: 0.18, lift: 1.188\n",
      "['low_points', 'North_America']=>['low_price'], confidence: 0.88, support: 0.22, lift: 1.251\n",
      "['low_price', 'North_America']=>['low_points'], confidence: 0.70, support: 0.22, lift: 1.182\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "L, support_data = generate_L(data_set, k=3, min_support=0.1)\n",
    "#big_rules_list是一个列表，列表的元素是元组->(规则条件，规则结果，置信度)\n",
    "big_rules_list = generate_big_rules(L, support_data, min_conf=0.7, min_support=0.1)\n",
    "# L is a list with sets element,\n",
    "for Lk in L:\n",
    "    print (\"=\"*50)\n",
    "    print (\"frequent \" + str(len(list(Lk)[0])) + \"-itemsets\\t\\tsupport\")\n",
    "    print (\"=\"*50)\n",
    "    for freq_set in Lk:\n",
    "        print (freq_set, support_data[freq_set])\n",
    "print()\n",
    "print (\"Big Rules is: \")\n",
    "print('=' * 50)\n",
    "for item in big_rules_list:\n",
    "    print(\"{}=>{}, confidence: {:.2f}, support: {:.2f}, lift: {:.3f}\".format(list(item[0]), list(item[1]), item[2], item[3], item[4]))\n",
    "visualization(big_rules_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们令k=3，最小置信度为0.7，最小支持度为0.1，得到的1~3项集以及强关联规则还有各规则的支持度、置信度、提升度的可视化都在上面展示了出来。  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 最终结果\n",
    "最终我们得到的强关联规则为：  \n",
    "**['North_America']=>['low_price']**, confidence: 0.75, support: 0.31, lift: 1.065  \n",
    "**['low_points']=>['low_price']**, confidence: 0.84, support: 0.50, lift: 1.203  \n",
    "**['low_price']=>['low_points']**, confidence: 0.71, support: 0.50, lift: 1.203  \n",
    "**['high_price']=>['high_points']**, confidence: 0.77, support: 0.16, lift: 1.889  \n",
    "**['low_points', 'North_America']=>['low_price']**, confidence: 0.88, support: 0.22, lift: 1.249  \n",
    "**['North_America', 'low_price']=>['low_points']**, confidence: 0.71, support: 0.22, lift: 1.196  \n",
    "**['Europe', 'low_points']=>['low_price']**, confidence: 0.76, support: 0.17, lift: 1.078  \n",
    "\n",
    "可见北美洲和欧洲生产的葡萄酒更可能属于低价酒，以及低评分的酒的价格也更可能偏低，低价格的酒的评分也更可能偏低。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
